package com.liu.qqclient.Service;
import com.liu.qqcommon.Message;
import com.liu.qqcommon.MessageType;

import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.net.Socket;

public class ClientConnectServerThread extends Thread {
    //该线程需要持有Socket
    private Socket socket;
    //构造器可以接受一个Socket对象
    public ClientConnectServerThread(Socket socket) {
        this.socket = socket;
    }
    //为了更方便的的到一个Socket对象，提供get set方法


    public Socket getSocket() {
        return socket;
    }

    public void setSocket(Socket socket) {
        this.socket = socket;
    }

    @Override
    public void run() {
        //因为Thread需要在后台和服务器通讯，因此用while循环
        while(true){
            try {
                System.out.println("客户端线程等待读取，服务端发出的信息");
                ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
                //服务端没有消息传出，这里一直会堵塞
                Message mes = (Message) ois.readObject();
                //判断Message类型，做相应的业务处理
                //如果读取到 服务端返回的在线用户lieb
                if(mes.getMesType().equals(MessageType.MESSAGE_RET_ONLINE_FRIEND)){
                    //取出在线列表信息，并显示
                    //规定
                    String[] onlineUsers = mes.getContent().split(" ");
                    System.out.println("\n==============当前在线列表===============");
                    for (int i = 0; i < onlineUsers.length; i++) {
                        System.out.println("用户：" + onlineUsers[i]);
                    }
                } else if (mes.getMesType().equals(MessageType.MESSAGE_COMM_MES )) {
                    //取出Message消息
                    System.out.println("\n" + mes.getSender() + "对" +mes.getGetter() + "说" + mes.getContent()
                    + "\t" + mes.getSendTime());

                } else if (mes.getMesType().equals(MessageType.MESSAGE_TO_ALL_MES )) {
                    //取出Message信息
                    System.out.println("\n" + mes.getSender() + "对大家说：" + mes.getContent());

                } else if (mes.getMesType().equals(MessageType.MESSAGE_FILE_MES )) {
                    System.out.println("\n" + mes.getSender() + "给" + mes.getGetter() +
                            "发文件" + mes.getSrc() + "到我的" + mes.getData() +"目录下");

                    //取出Message文件的字节数组，通过文件输出流写如到磁盘
                    FileOutputStream fileOutputStream = new FileOutputStream(mes.getData());
                    fileOutputStream.write(mes.getData().getBytes());
                    fileOutputStream.close();
                    System.out.println("\n文件保存成功");

                } else{//没有读到
                    System.out.println("是其他类型的Message，暂时不处理");

                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }


    }
}
